//------------------------------------------------------------------------------------
//CONSTANTES
//------------------------------------------------------------------------------------
var prefijoControl = "ctl0_cphContent_";
var WIDTH_MENSAJE_RESPUESTA = "50%";
var HEIGHT_MENSAJE_RESPUESTA = 15;


//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario de busqueda
//Por        : VSR, 01/01/2011
function validarFormularioBusqueda() {
  validationEngineClearCountCustomError();
  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//------------------------------------------------------------------------------------
//Descripcion: abre formulario para ingresar una nueva pagina
//Por        : VSR, 01/01/2011
function abrirFormularioPagina(id) {
  jQuery.fancybox({
    width: "98%",
    height: "95%",
    modal: true,
    type: "iframe",
    href: "index.php?page=Pagina.AdmDetalle&id=" + id
  });
}

//------------------------------------------------------------------------------------
//Descripcion: abre formulario para ingresar una nueva notificacion
//Por        : VSR, 04/04/2011
function abrirFormularioNotificacion(id) {
  jQuery.fancybox({
    width: "98%",
    height: "95%",
    modal: true,
    type: "iframe",
    href: "index.php?page=Pagina.AdmNotificacionDetalle&id=" + id
  });
}

//------------------------------------------------------------------------------------
//Descripcion: muestra la estadistica de visualizacion de una notificacion
//Por        : VSR, 17/04/2011
function verEstadisticaNotificacion(id) {
  jQuery.fancybox({
    width: "98%",
    height: "95%",
    modal: true,
    type: "iframe",
    href: "index.php?page=Pagina.AdmNotificacionEstadistica&id=" + id
  });
}

//-------------------------------------------------------------------------------------
//Descripcion : valida los datos ingresados en el formulario detalle
//Por         : VSR, 01/01/2011
function validarFormularioPagina() {
  validationEngineClearCountCustomError();
  var msgError = "";
  var txtModulo = document.getElementById("txtModulo");
  var txtNombreClase = document.getElementById("txtNombreClase");
  var txtExisteNombreClase = document.getElementById("txtExisteNombreClase");
  var funcionesValidas = true;

  //valida MODULO
  if (IsValid_Empty(txtModulo)) {
    jQuery.validationEngine.addPromptError("txtModulo", "* Este campo es requerido");
  }
  else {
    if (!IsValid_CaracteresPermitidos(txtModulo)) {
      jQuery.validationEngine.addPromptError("txtModulo", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
    }
    else {
      jQuery.validationEngine.removePrompt("txtModulo");
    }
  }

  //valida NOMBRE CLASE
  if (IsValid_Empty(txtNombreClase)) {
    jQuery.validationEngine.addPromptError("txtNombreClase", "* Este campo es requerido");
  }
  else {
    if (!IsValid_CaracteresPermitidos(txtNombreClase)) {
      jQuery.validationEngine.addPromptError("txtNombreClase", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
    }
    else if (txtExisteNombreClase.value == 1) {
      jQuery.validationEngine.addPromptError("txtNombreClase", "* No disponible, ya existe");
    }
    else {
      jQuery.validationEngine.removePrompt("txtNombreClase");
    }
  }

  //valida FUNCIONES
  msgError += validaValoresFunciones();
  if (msgError != "") {
    alert("Se encontraroon los siguientes errores:\n" + msgError);
    funcionesValidas = false;
  }

  var retorno = jQuery(NOMBRE_FORM_NORMAL_JQUERY).validationEngine({returnIsValid: true});
  if (retorno && funcionesValidas) {
    encodearValorFunciones();
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{ minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA });
  }
  return retorno && funcionesValidas;
}

//-------------------------------------------------------------------------------------
//Descripcion : valida los datos ingresados en el formulario detalle de la notificacion
//Por         : VSR, 06/04/2011
function validarFormularioNotificacion() {
  validationEngineClearCountCustomError();
  var ddlSkin = document.getElementById("ddlSkin_ddlCombo");
  var ddlPosicion = document.getElementById("ddlPosicion_ddlCombo");
  var txtFechaInicio = document.getElementById("txtFechaInicio");
  var txtFechaTermino = document.getElementById("txtFechaTermino");
  var txtIdNotificacion = document.getElementById("txtIdNotificacion");
  var txtDescripcion = document.getElementById("txtDescripcion");
  var rbtnPersonalizado = document.getElementById("rbtnPersonalizado");
  var wuc_txtIdsHija = document.getElementById("msUsuarios_lstPadre");
  var fechaHoy = new Date();
  var newFechaInicio = null;
  var newFechaTermino = null;
  var newFechaInicioCompararHoy = null;
  var idNotificacion = txtIdNotificacion.value;
  var htmlEditor = jQuery(".nicEdit-main").html();
  var textEditor = jQuery(".nicEdit-main").text();

  //valida FECHA INICIO
  if(IsValid_Empty(txtFechaInicio)){
    jQuery.validationEngine.addPromptError("txtFechaInicio", "* Este campo es requerido");
  } else {
    if(!IsValid_Date(txtFechaInicio)){
      jQuery.validationEngine.addPromptError("txtFechaInicio", "* Fecha inv&aacute;lida");
    }
    else {
      jQuery.validationEngine.removePrompt("txtFechaInicio");
    }
  }

  //valida FECHA TERMINO
  if(IsValid_Empty(txtFechaTermino)){
    jQuery.validationEngine.addPromptError("txtFechaTermino", "* Este campo es requerido");
  } else {
    if(!IsValid_Date(txtFechaInicio)){
      jQuery.validationEngine.addPromptError("txtFechaTermino", "* Fecha inv&aacute;lida");
    }
    else{
      jQuery.validationEngine.removePrompt("txtFechaTermino");
    }
  }

  //valida que la fecha de termino no sea menor que la de inicio
  if(!IsValid_Empty(txtFechaInicio) && !IsValid_Empty(txtFechaTermino) && IsValid_Date(txtFechaInicio) && IsValid_Date(txtFechaTermino)){
    //construye objetos fechas para compararlos
    newFechaInicio  = getDate(txtFechaInicio.value, "00:00");
    newFechaTermino = getDate(txtFechaTermino.value, "00:00");
    newFechaInicioCompararHoy = getDate(txtFechaInicio.value, "23:59");

    //compara las fechas, si hay error muestra mensaje sino envia formulario
    if((newFechaInicioCompararHoy < fechaHoy) && idNotificacion == "0") {
      jQuery.validationEngine.addPromptError("txtFechaInicio", "* No puede ser menor que hoy");
    } else if(newFechaInicio > newFechaTermino){
      jQuery.validationEngine.addPromptError("txtFechaInicio", "* No puede ser mayor que fecha de t&eacute;rmino");
    }
    else{
      jQuery.validationEngine.removePrompt("txtFechaInicio");
    }
  }

  //valida SKIN
  if(IsValid_ComboVacio(ddlSkin)){
    jQuery.validationEngine.addPromptError("ddlSkin_ddlCombo", "* Este campo es requerido");
  }
  else{
    jQuery.validationEngine.removePrompt("ddlSkin_ddlCombo");
  }

  //valida POSICION
  if(IsValid_ComboVacio(ddlPosicion)){
    jQuery.validationEngine.addPromptError("ddlPosicion_ddlCombo", "* Este campo es requerido");
  }
  else{
    jQuery.validationEngine.removePrompt("ddlPosicion_ddlCombo");
  }

  //valida DESCRIPCION
  if(jQuery.trim(textEditor) == ""){
    jQuery.validationEngine.addPromptError("lblObligatorioDescripcion", "* Este campo es requerido");
    txtDescripcion.value = "";
  }
  else{
    jQuery.validationEngine.removePrompt("lblObligatorioDescripcion");
    txtDescripcion.value = htmlEditor;
  }

  //valida ASIGNACION USUARIO si elige la opcion Personalizado
  if(rbtnPersonalizado.checked) {
    if(IsValid_Empty(wuc_txtIdsHija)) {
      jQuery.validationEngine.addPromptError("rbtnPersonalizado", "* Debe seleccionar al menos 1 usuario");
    } else {
      jQuery.validationEngine.removePrompt("rbtnPersonalizado");
    }
  }

  var retorno = jQuery(NOMBRE_FORM_NORMAL_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{ minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA });
  }
  return retorno;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario de busqueda de notificaciones
//Por        : VSR, 04/04/2011
function validarFormularioBusquedaNotificacion() {
  validationEngineClearCountCustomError();
  var txtFiltroFechaDesde = document.getElementById(prefijoControl + "txtFiltroFechaDesde");
  var txtFiltroFechaHasta = document.getElementById(prefijoControl + "txtFiltroFechaHasta");

  //valida FECHA DESDE
  if(!IsValid_Empty(txtFiltroFechaDesde)){
    if(!IsValid_Date(txtFiltroFechaDesde)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFiltroFechaDesde", "* Fecha inv&aacute;lida");
    }
    else {
      jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaDesde");
    }
  } else {
    jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaDesde");
  }

  //valida FECHA HASTA
  if(!IsValid_Empty(txtFiltroFechaHasta)){
    if(!IsValid_Date(txtFiltroFechaHasta)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFiltroFechaHasta", "* Fecha inv&aacute;lida");
    }
    else {
      jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaHasta");
    }
  } else {
    jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaHasta");
  }

  //valida que la fecha de termino no sea menor que la de inicio
  if(!IsValid_Empty(txtFiltroFechaDesde) && !IsValid_Empty(txtFiltroFechaHasta) && IsValid_Date(txtFiltroFechaDesde) && IsValid_Date(txtFiltroFechaHasta)){
    //construye objetos fechas para compararlos
    var newFechaDesde  = getDate(txtFiltroFechaDesde.value, "00:00");
    var newFechaHasta = getDate(txtFiltroFechaHasta.value, "00:00");

    //compara las fechas, si hay error muestra mensaje sino envia formulario
    if(newFechaDesde > newFechaHasta){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFiltroFechaDesde", "* No puede ser mayor que fecha de t&eacute;rmino");
    }
    else{
      jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaDesde");
    }
  }

  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//------------------------------------------------------------------------------------
//Descripcion: cierra el pop up y recarga el listado
//Por        : VSR, 01/01/2011
function cerrarPopUpPagina(id, valorCargarDesdePopUp, filtroTexto) {
  //al salir llama al metodo para cargar el listado
  if (valorCargarDesdePopUp == "1") {
    parent.cargarDesdePopUpPagina(valorCargarDesdePopUp, filtroTexto);
    parent.document.forms[0].submit();
  }
  parent.jQuery.fancybox.close();
}

//------------------------------------------------------------------------------------
//Descripcion: cierra el pop up y recarga el listado
//Por        : VSR, 01/01/2011
function cerrarPopUpNotificacion(id, valorCargarDesdePopUp, filtroTexto) {
  //al salir llama al metodo para cargar el listado
  if (valorCargarDesdePopUp == "1") {
    parent.cargarDesdePopUpNotificacion(valorCargarDesdePopUp, filtroTexto);
    parent.document.forms[0].submit();
  }
  parent.jQuery.fancybox.close();
}

//------------------------------------------------------------------------------------
//Descripcion: cierra el pop up
//Por        : VSR, 18/04/2011
function cerrarPopUpEstadisticaNotificacion() {
  parent.jQuery.fancybox.close();
}

//------------------------------------------------------------------------------------
//Descripcion: cierra el pop up y recarga el listado
//Por        : VSR, 01/01/2011
function cargarDesdePopUpPagina(valor, filtroTexto) {
  var txtCargaDesdePopUp = document.getElementById(prefijoControl + "txtCargaDesdePopUp");
  var txtFiltroNombre = document.getElementById(prefijoControl + "txtFiltroNombre");
  txtCargaDesdePopUp.value = valor;
  filtroTexto = Url.decode(filtroTexto);
  filtroTexto = filtroTexto.replace(/\+/g, " ");
  if (filtroTexto != "") txtFiltroNombre.value = filtroTexto;

  var textoModal = generarTextoHtmlModal("Actualizando b&uacute;squeda, espere un momento por favor...");
  jQuery.modal(textoModal,{ minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA });
}

//------------------------------------------------------------------------------------
//Descripcion: cierra el pop up y recarga el listado
//Por        : VSR, 01/01/2011
function cargarDesdePopUpNotificacion(valor, filtroTexto) {
  var txtCargaDesdePopUp = document.getElementById(prefijoControl + "txtCargaDesdePopUp");
  var txtFiltroTitulo = document.getElementById(prefijoControl + "txtFiltroTitulo");
  txtCargaDesdePopUp.value = valor;
  filtroTexto = Url.decode(filtroTexto);
  filtroTexto = filtroTexto.replace(/\+/g, " ");
  if (filtroTexto != "") txtFiltroTitulo.value = filtroTexto;

  var textoModal = generarTextoHtmlModal("Actualizando b&uacute;squeda, espere un momento por favor...");
  jQuery.modal(textoModal,{ minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA });
}

//-------------------------------------------------------------------------------------
//Descripcion : agrega una fila a la tabla para agregar una opcion a la pregunta
//Por         : VSR, 01/01/2011
function addFilaFuncion() {
  var txtTotalFunciones = document.getElementById("txtTotalFunciones");
  var totalFunciones = 0;
  var themeBaseUrl = obtenerThemeBaseUrl();
  var fila = "";

  try {
    //incrementa el total de opciones
    totalFunciones = parseInt(txtTotalFunciones.value);
    totalFunciones++;
    txtTotalFunciones.value = totalFunciones;

    fila += "<tr>\n";
    fila += "  <td>\n";
    fila += "    <input type=\"hidden\" id=\"txtIdFuncionAdd[]\" name=\"txtIdFuncionAdd[]\" value=\"-1\" />\n";
    fila += "    <input type=\"text\" id=\"txtNombreAdd[]\" name=\"txtNombreAdd[]\" value=\"\" class=\"cssInput\" style=\"width:97%;\" maxlength=\"100\" />\n";
    fila += "  </td>\n";
    fila += "  <td><input type=\"text\" id=\"txtLlaveAdd[]\" name=\"txtLlaveAdd[]\" value=\"\" style=\"width:97%;\" class=\"cssInput\" maxlength=\"100\" /></td>\n";
    fila += "  <td><input type=\"text\" id=\"txtOrdenAdd[]\" name=\"txtOrdenAdd[]\" value=\"\" style=\"width:97%;\" class=\"cssInput\" maxlength=\"3\" /></td>\n";
    fila += "  <td><a href=\"javascript:;\" onclick=\"deleteFila('tablaFunciones', this.parentNode.parentNode.rowIndex, 'txtTotalFunciones')\"><span class=\"ico16-eliminar\"><img alt=\"eliminar\" class=\"ico16Eliminar cursorPointer\" src=\""+ themeBaseUrl +"/img/_blank.gif\"></span></a></td>\n";
    fila += "</tr>\n";
    //agrega la fila
    jQuery("#tablaFunciones").append(fila);

  }
  catch (e) {
    if (e.description) { //para IE
      alert("Exception:\n" + e.description)
    }
    else { // otro navegador
      alert("Exception:\n" + e)
    }
    return false;
  }
}

//----------------------------------------------------------------------------------------
//Descripcion : elimina una funcion
//Por         : VSR, 01/01/2011
function eliminarFuncion(idFuncion, idTabla, indiceFila, objTotalRegistros) {
  var queryString = "";

  try {
    //construye queryString
    queryString += "page=Pagina.HttpAjax";
    queryString += "&op=VerificarEliminacionFuncion";
    queryString += "&idFuncion=" + Url.encode(idFuncion);

    var okFunc = function(t) {
      var respuesta = jQuery.trim(t);
      if (contieneTextoTerminoSesion(respuesta)) {
        redireccionarLogin();
      }
      else if (respuesta == CONST_CODIGO_SQL_ERROR) {
        alert("Ha ocurrido un error interno y no se pudo verificar la eliminación de la función");
      }
      else {
        //elimina funcion que no tiene registros asociados
        if (respuesta == 0) {
          deleteFila(idTabla, indiceFila, objTotalRegistros)
        } else {
          //confirma si desea eliminar la funcion que tiene registros asociados
          if (confirm("Al eliminar la función se eliminarán todas sus referencias, ¿desea continuar?")) {
            deleteFilaSinConfirmacion(idTabla, indiceFila, objTotalRegistros)
          }
        }

      }
    }
    var errFunc = function(t) {
      alert("Ha ocurrido un error interno y no se pudo verificar la eliminación de la función");
    }
    jQuery.ajax({
      url: "index.php",
      type: "post",
      async: false,
      data: queryString,
      success: okFunc,
      error: errFunc
    });   
  }
  catch (e) {
    if (e.description) { //para IE
      alert("Exception:\n" + e.description)
    }
    else { // otro navegador
      alert("Exception:\n" + e)
    }
    return false;
  }
}

//----------------------------------------------------------------------------------------
//Descripcion : elimina una fila de una tabla dada
//Por         : VSR, 01/01/2011
function deleteFila(id, indiceFila, objTotalRegistros) {
  var table = document.getElementById(id)
  var txtTotalRegistros = document.getElementById(objTotalRegistros);
  var totalRegistros = parseInt(txtTotalRegistros.value);

  if (confirm("¿Está seguro que quiere eliminar el registro?")) {
    table.deleteRow(indiceFila);
    totalRegistros--;
    txtTotalRegistros.value = totalRegistros;
  }
}

//-------------------------------------------------------------------------------------
//Descripcion : elimina una fila de una tabla dada sin confirmarla
//Por         : VSR, 01/01/2011
function deleteFilaSinConfirmacion(id, indiceFila, objTotalRegistros) {
  var table = document.getElementById(id)
  var txtTotalRegistros = document.getElementById(objTotalRegistros);
  var totalRegistros = parseInt(txtTotalRegistros.value);
  table.deleteRow(indiceFila);
  totalRegistros--;
  txtTotalRegistros.value = totalRegistros;
}


//----------------------------------------------------------------------------------------
//Descripcion : encodea los valores resgistrados en las funciones para enviarlos sin comas
//Por         : VSR, 01/01/2011
function encodearValorFunciones() {
  var txtIdFuncionAdd = document.getElementsByName("txtIdFuncionAdd");
  var txtNombreAdd = document.getElementsByName("txtNombreAdd");
  var txtLlaveAdd = document.getElementsByName("txtLlaveAdd");
  var txtOrdenAdd = document.getElementsByName("txtOrdenAdd");

  //si existe el objeto entonces lo recorre
  if (txtIdFuncionAdd) {
    for (var i = 0; i <= txtIdFuncionAdd.length - 1; i++) {
      oIdFuncion = txtIdFuncionAdd[i];
      oNombre = txtNombreAdd[i];
      oLlave = txtLlaveAdd[i];
      oOrden = txtOrdenAdd[i];
      //encodea los valores
      oIdFuncion.value = Url.encode(oIdFuncion.value);
      oNombre.value = Url.encode(oNombre.value);
      oLlave.value = Url.encode(oLlave.value);
      oOrden.value = Url.encode(oOrden.value);
    }
  }
}

//----------------------------------------------------------------------------------------
//Descripcion : valida los valores ingresados en los campos de las funciones
//Por         : VSR, 01/01/2011
function validaValoresFunciones() {
  var msgError = "";
  var txtIdFuncionAdd = document.getElementsByName("txtIdFuncionAdd[]");
  var txtNombreAdd = document.getElementsByName("txtNombreAdd[]");
  var txtLlaveAdd = document.getElementsByName("txtLlaveAdd[]");
  var txtOrdenAdd = document.getElementsByName("txtOrdenAdd[]");
  var indiceFila;
  var listadoNombres = "";
  var listadoLlaves = "";
  var listadoOrden = "";

  //si existe el objeto entonces lo recorre
  if (txtIdFuncionAdd) {
    for (var i = 0; i <= txtIdFuncionAdd.length - 1; i++) {
      indiceFila = i + 1;
      oNombre = txtNombreAdd[i];
      oLlave = txtLlaveAdd[i];
      oOrden = txtOrdenAdd[i];

      //valida que todos los campos esten llenos si es que al menos 1 tiene valor
      if (!IsValid_Empty(oNombre) || !IsValid_Empty(oLlave) || !IsValid_Empty(oOrden)) {
        //valida NOMBRE
        if (IsValid_Empty(oNombre)) {
          msgError += " - Función Fila " + indiceFila + ": Debe ingresar Nombre\n";
          formatearEstiloConError(oNombre, "");
        } else {
          if (!IsValid_CaracteresPermitidos(oNombre)) {
            msgError += " - Función Fila " + indiceFila + ": El texto ingresado en Nombre no puede contener los siguientes caracteres: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR + "\n";
            formatearEstiloConError(oNombre, "");
          } else {
            //valida que el texto no este repetido
            if (InStr(listadoNombres, "[" + UCase(Trim(oNombre.value)) + "]") > 0) {
              msgError += " - Función Fila " + indiceFila + ": El texto ingresado en Nombre está repetido\n";
              formatearEstiloConError(oNombre, "");
            } else {
              listadoNombres += "[" + UCase(Trim(oNombre.value)) + "]";
              if (oNombre.value != "Ver") formatearEstiloNormal(oNombre, "", false, false, "", "");
            }
          }
        }

        //valida LLAVE
        if (IsValid_Empty(oLlave)) {
          msgError += " - Función Fila " + indiceFila + ": Debe ingresar Llave\n";
          formatearEstiloConError(oLlave, "");
        } else {
          if (!IsValid_AlphaNumerico(oLlave)) {
            msgError += " - Función Fila " + indiceFila + ": El texto ingresado en Llave sólo puede contener letras mayúsculas, minúsculas y/o números\n";
            formatearEstiloConError(oLlave, "");
          } else {
            //valida que el texto no este repetido
            if (InStr(listadoLlaves, "[" + UCase(Trim(oLlave.value)) + "]") > 0) {
              msgError += " - Función Fila " + indiceFila + ": El texto ingresado en Llave está repetido\n";
              formatearEstiloConError(oLlave, "");
            } else {
              listadoLlaves += "[" + UCase(Trim(oLlave.value)) + "]";
              if (oNombre.value != "Ver") formatearEstiloNormal(oLlave, "", false, false, "", "");
            }
          }
        }

        //valida ORDEN
        if (IsValid_Empty(oOrden)) {
          msgError += " - Función Fila " + indiceFila + ": Debe ingresar Orden\n";
          formatearEstiloConError(oOrden, "");
        } else {
          if (!IsValid_NumberInt(oOrden)) {
            msgError += " - Función Fila " + indiceFila + ": El valor ingresado en Orden no es válido\n";
            formatearEstiloConError(oOrden, "");
          } else {
            if (oOrden.value == "0") {
              msgError += " - Función Fila " + indiceFila + ": El valor ingresado en Orden debe ser mayor a cero\n";
              formatearEstiloConError(oOrden, "");
            } else {
              //valida que el texto no este repetido
              if (InStr(listadoOrden, "[" + UCase(Trim(oOrden.value)) + "]") > 0) {
                msgError += " - Función Fila " + indiceFila + ": El texto ingresado en Orden está repetido\n";
                formatearEstiloConError(oOrden, "");
              } else {
                listadoOrden += "[" + UCase(Trim(oOrden.value)) + "]";
                if (oNombre.value != "Ver") formatearEstiloNormal(oOrden, "", false, false, "", "");
              }
            }
          }
        }
      }
      else {
        if (oNombre.value != "Ver") formatearEstiloNormal(oNombre, "", false, false, "", "");
        if (oNombre.value != "Ver") formatearEstiloNormal(oLlave, "", false, false, "", "");
        if (oNombre.value != "Ver") formatearEstiloNormal(oOrden, "", false, false, "", "");
      }
    }
  }
  //retorna mensaje
  return msgError;
}

//----------------------------------------------------------------------------------------
//Descripcion : valida si se desea eliminar la pagina
//Por         : VSR, 01/01/2011
function validarEliminar() {
  if (confirm("Si elimina la página se perderán todas las referencias asociadas a ellas y no se podrán recuperar\n¿Desea eliminar la página?")) {
    return true;
  } else {
    return false;
  }
}

//----------------------------------------------------------------------------------------
//Descripcion : valida si se desea eliminar la notificacion
//Por         : VSR, 07/04/2011
function validarEliminarNotificacion() {
  if (confirm("Si elimina la notificación se perderán todas las referencias asociadas a ellas y no se podrán recuperar\n¿Desea eliminar la notificación?")) {
    return true;
  } else {
    return false;
  }
}

//-------------------------------------------------------------------------------------
//Descripcion : elimina una pagina
//Por         : VSR, 01/01/2011
function eliminarPagina(idPagina) {
  var txtCargaDesdePopUp = document.getElementById(prefijoControl + "txtCargaDesdePopUp");
  var queryString = "";

  try {
    //construye queryString
    queryString += "page=Pagina.HttpAjax";
    queryString += "&op=EliminarPagina";
    queryString += "&idPagina=" + Url.encode(idPagina);

    if (confirm("¿Está seguro de eliminar el registro?")) {
      var textoModal = generarTextoHtmlModal("Eliminando p&aacute;gina, espere un momento por favor...");
      jQuery.modal(textoModal,{ minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA });

      var okFunc = function(t) {
        var respuesta = jQuery.trim(t);
        if (contieneTextoTerminoSesion(respuesta)) {
          redireccionarLogin();
        }
        else if (respuesta == CONST_CODIGO_SQL_ERROR) {
          alert("Ha ocurrido un error interno y no se pudo eliminar el registro");
        }
        else {
          txtCargaDesdePopUp.value = "1";
          document.forms[0].submit();
        }
      }
      var errFunc = function(t) {
        alert("Ha ocurrido un error interno y no se pudo eliminar el registro");
      }
      jQuery.ajax({
        url: "index.php",
        type: "post",
        async: false,
        data: queryString,
        success: okFunc,
        error: errFunc
      });   
    }
  }
  catch (e) {
    if (e.description) { //para IE
      alert("Exception:\n" + e.description)
    }
    else { // otro navegador
      alert("Exception:\n" + e)
    }
    return false;
  }
}

//-------------------------------------------------------------------------------------
//Descripcion : elimina una notificacion
//Por         : VSR, 07/04/2011
function eliminarNotificacion(idNotificacion) {
  var txtCargaDesdePopUp = document.getElementById(prefijoControl + "txtCargaDesdePopUp");
  var queryString = "";

  try {
    //construye queryString
    queryString += "page=Pagina.HttpAjax";
    queryString += "&op=EliminarNotificacion";
    queryString += "&idNotificacion=" + Url.encode(idNotificacion);

    if (confirm("¿Está seguro de eliminar el registro?")) {
      var textoModal = generarTextoHtmlModal("Eliminando notificaci&oacute;n, espere un momento por favor...");
      jQuery.modal(textoModal,{ minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA });

      var okFunc = function(t) {
        var respuesta = jQuery.trim(t);
        if (contieneTextoTerminoSesion(respuesta)) {
          redireccionarLogin();
        }
        else if (respuesta == CONST_CODIGO_SQL_ERROR) {
          alert("Ha ocurrido un error interno y no se pudo eliminar el registro");
        }
        else {
          txtCargaDesdePopUp.value = "1";
          document.forms[0].submit();
        }
      }
      var errFunc = function(t) {
        alert("Ha ocurrido un error interno y no se pudo eliminar el registro");
      }
      jQuery.ajax({
        url: "index.php",
        type: "post",
        async: false,
        data: queryString,
        success: okFunc,
        error: errFunc
      });
    }
  }
  catch (e) {
    if (e.description) { //para IE
      alert("Exception:\n" + e.description)
    }
    else { // otro navegador
      alert("Exception:\n" + e)
    }
    return false;
  }
}

//--------------------------------------------------------------------------------------------
//Descripcion : comprueba si el valor ya existe en base de datos
//Por         : VSR, 01/01/2011
function comprobarDuplicidadDatoPagina(id, elContenedorRespuestaTxt, elContenedorRespuestaDiv, opcion) {
  var txtModulo = document.getElementById("txtModulo");
  var txtNombreClase = document.getElementById("txtNombreClase");
  var txtContenedor = document.getElementById(elContenedorRespuestaTxt);
  var divContenedor = document.getElementById(elContenedorRespuestaDiv);
  var queryString = "";
  var queryStringUpdate = "";
  var valorComparar = "";
  var themeBaseUrl = obtenerThemeBaseUrl();

  if(!IsValid_Empty(txtModulo) && !IsValid_Empty(txtNombreClase)) {
    //construye queryString
    queryString += "page=Pagina.HttpAjax";
    queryString += "&id=$id";
    queryString += "&valor=$valor";
    queryString += "&op=$op";

    //formate la URL con los parametros verdaderos
    valorComparar = txtModulo.value + "." + txtNombreClase.value;
    queryStringUpdate = queryString.replace("$id", Url.encode(id));
    queryStringUpdate = queryStringUpdate.replace("$valor", Url.encode(valorComparar));
    queryStringUpdate = queryStringUpdate.replace("$op", Url.encode(opcion));

    var okFunc = function(t) {
      var respuesta = jQuery.trim(t);
      if (respuesta == CONST_CODIGO_SQL_ERROR) {
        divContenedor.innerHTML = "&nbsp;<span class='ico16-error'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico16' alt='' /></span>&nbsp;<span class='cssMensajeError'>Ha ocurrido un error interno y no se pudo obtener el valor.</span>";
        txtContenedor.value = "0";
      }
      else {
        //si el valor esta duplicado entonces muestra mensaje de Ocupado
        if (respuesta == 1) {
          divContenedor.innerHTML = "&nbsp;<span class='ico16-error'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico16' alt='' /></span>&nbsp;<span class='cssMensajeError'>No disponible</span>";
        }
        else {
          divContenedor.innerHTML = "&nbsp;<span class='ico16-ticket'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico16' alt='' /></span>&nbsp;<span class='cssMensajeExito'>Disponible</span>";
        }
        txtContenedor.value = respuesta;
      }
    }
    var errFunc = function(t) {
      divContenedor.innerHTML = "&nbsp;<span class='ico16-error'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico16' alt='' /></span>&nbsp;<span class='cssMensajeError'>Ha ocurrido un error interno y no se pudo obtener el valor.</span>";
    }
    jQuery.ajax({
      url: "index.php",
      type: "post",
      async: false,
      data: queryStringUpdate,
      success: okFunc,
      error: errFunc
    });
  } else {
    divContenedor.innerHTML = "";
    txtContenedor.value = "0";
  }

}

//--------------------------------------------------------------------------------------------
//Descripcion : realiza una vista previa de como se vería el tooltips con los valores seteados
//Por         : VSR, 09/04/2011
function vistaPreviaToolTip(){
  var txtTitulo = document.getElementById("txtTitulo");
  var txtControlHtmlAsociado = document.getElementById("txtControlHtmlAsociado");
  var ddlSkin = document.getElementById("ddlSkin_ddlCombo");
  var ddlPosicion = document.getElementById("ddlPosicion_ddlCombo");
  var txtAjusteTop = document.getElementById("txtAjusteTop");
  var txtAjusteLeft = document.getElementById("txtAjusteLeft");
  var txtAncho = document.getElementById("txtAncho");
  var txtDescripcion = document.getElementById("txtDescripcion");
  var ifVistaPrevia =  document.getElementById("ifVistaPrevia");
  var htmlEditor = jQuery(".nicEdit-main").html();
  var queryString = ""

  queryString += "page=Pagina.AdminVistaPreviaTooltips";
  queryString += "&view=1";
  queryString += "&titulo="+ Url.encode(txtTitulo.value);
  queryString += "&controlHtml="+ Url.encode(txtControlHtmlAsociado.value);
  queryString += "&skin="+ Url.encode(ddlSkin.value);
  queryString += "&posicion="+ Url.encode(ddlPosicion.value);
  queryString += "&ajusteTop="+ Url.encode(txtAjusteTop.value);
  queryString += "&ajusteLeft="+ Url.encode(txtAjusteLeft.value);
  queryString += "&ancho="+ Url.encode(txtAncho.value);
  queryString += "&descripcion="+ Url.encode(htmlEditor);

  ifVistaPrevia.src = "./index.php?"+ queryString;
}

//--------------------------------------------------------------------------------------------
//Descripcion : muestra u oculta el panel de la vista previa de la notificacion
//Por         : VSR, 09/04/2011
function mostrarPanelVistaPrevia() {
  var chkVistaPrevia = document.getElementById("chkVistaPrevia");
  var lblVistaPrevia = document.getElementById("lblVistaPrevia");

  if(chkVistaPrevia.checked) {
    lblVistaPrevia.innerHTML = "<b>Ocultar vista previa</b>";
    vistaPreviaToolTip();
  } else {
    lblVistaPrevia.innerHTML = "Mostrar vista previa";
  }
  jQuery("#hVistaPrevia").slideToggle("slow");
}

//--------------------------------------------------------------------------------------------
//Descripcion : muestra u oculta el listado de seleccion de usuario
//Por         : VSR, 14/04/2011
function mostrarListadoUsuarioNotificacion(opcion) {
  var hListadoUsuarios = document.getElementById("hListadoUsuarios");
  var hBuscarPorPerfil = document.getElementById("hBuscarPorPerfil");
  var ddlPerfil = document.getElementById("ddlPerfil_ddlCombo");
  var txtIdNotificacion = document.getElementById("txtIdNotificacion");
  var rbtnTodos = document.getElementById("rbtnTodos");
  var rbtnPersonalizado = document.getElementById("rbtnPersonalizado");
  var wuc_lstPadre = document.getElementById("msUsuarios_lstPadre");
  var wuc_lstHija = document.getElementById("msUsuarios_lstHija");
  var wuc_txtIdsHija = document.getElementById("msUsuarios_lstPadre");
  var limpiarControles = (txtIdNotificacion.value == "0") ? true : false;


  if(opcion == "Todos") {
    hListadoUsuarios.style.display = "none";
    hBuscarPorPerfil.style.display = "none";
    rbtnTodos.checked = true;
  } else {
    hListadoUsuarios.style.display = "block";
    hBuscarPorPerfil.style.display = "block";
    rbtnPersonalizado.checked = true;
  }

  ddlPerfil.selectedIndex = 0;
  wuc_lstPadre.innerHTML = "";

  if(limpiarControles){
    wuc_lstHija.innerHTML = "";
    wuc_txtIdsHija.value = "";
  }
}

//--------------------------------------------------------------------------------------------
//Descripcion : carga los usuario dependiendo del perfil seleccionado
//Por         : VSR, 14/04/2011
function cargarUsuariosPorPerfil() {
  var wuc_lstPadre = document.getElementById("msUsuarios_lstPadre");
  var wuc_txtIdsHija = document.getElementById("msUsuarios_lstPadre");
  var ddlPerfil = document.getElementById("ddlPerfil_ddlCombo");
  var queryString = "";

  if(IsValid_ComboVacio(ddlPerfil)) {
    wuc_lstPadre.innerHTML = "";
  } else {
    //construye queryString
    queryString += "page=Pagina.HttpAjax";
    queryString += "&op=ObtenerUsuariosPorPerfil";
    queryString += "&idPerfil="+ ddlPerfil.value;
    queryString += "&usuariosSeleccionados="+ wuc_txtIdsHija.value;

    var okFunc = function(t) {
      var respuesta = jQuery.trim(t);
      if (contieneTextoTerminoSesion(respuesta)) {
        redireccionarLogin();
      }
      else if (respuesta == CONST_CODIGO_SQL_ERROR) {
        alert("Ha ocurrido un error interno y no se pudo obtener el listado de usuarios");
      }
      else {
        cargarDatosMultiselect(wuc_lstPadre, respuesta);
      }
    }
    var errFunc = function(t) {
      alert("Ha ocurrido un error interno y no se pudo obtener el listado de usuarios");
    }
    jQuery.ajax({
      url: "index.php",
      type: "post",
      async: false,
      data: queryString,
      success: okFunc,
      error: errFunc
    });
  }
}

//--------------------------------------------------------------------------------------------
//Descripcion : carga los usuario en el multiselect definido
//Por         : VSR, 14/04/2011
function cargarDatosMultiselect(objMultiselect, estructuraJSON) {
  objMultiselect.innerHTML = "";
  if(estructuraJSON != "") {
    data = jQuery.parseJSON(estructuraJSON);
    for(i = 0; i <= data.length - 1; i++){
      texto = data[i].Texto;
      valor = data[i].Valor;
      objMultiselect.options[i] = new Option(texto,valor,0);
    }
  }
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario de busqueda de notificaciones
//Por        : VSR, 04/04/2011
function validarFormularioEstadisticaNotificacion(idNotificacion) {
  validationEngineClearCountCustomError();
  var ddlEstado = document.getElementById("ddlEstado");
  var lblTabla = document.getElementById("lblTabla");
  var queryString = "";
  var themeBaseUrl = obtenerThemeBaseUrl();
  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});

  if(retorno) {
    //construye queryString
    queryString += "page=Pagina.HttpAjax";
    queryString += "&op=ObtenerEstadisticaNotificacion";
    queryString += "&idNotificacion="+ idNotificacion;
    queryString += "&estado="+ ddlEstado.value;

    lblTabla.innerHTML = "<img src='"+ themeBaseUrl +"/img/autocomplete_spinner.gif' border='0' align='absmiddle'>&nbsp;<span style='color:#999999'>obtiendo datos, espere un momento...</span>";
    var okFunc = function(t) {
      var respuesta = jQuery.trim(t);
      if (contieneTextoTerminoSesion(respuesta)) {
        redireccionarLogin();
      }
      else if (respuesta == CONST_CODIGO_SQL_ERROR) {
        alert("Ha ocurrido un error interno y no se pudo obtener la estadistica");
        lblTabla.innerHTML = "";
      }
      else {
        lblTabla.innerHTML = respuesta;
      }
    }
    var errFunc = function(t) {
      alert("Ha ocurrido un error interno y no se pudo obtener la estadistica");
      lblTabla.innerHTML = "";
    }
    jQuery.ajax({
      url: "index.php",
      type: "post",
      async: false,
      data: queryString,
      success: okFunc,
      error: errFunc
    });

  }
}
